package com.jrx.anytxn.param.service.system;

import com.jrx.anytxn.common.exception.TxnException;
import com.jrx.anytxn.i18n.response.TxnPage;
import com.jrx.anytxn.param.entity.PrBankInstInfo;
import com.jrx.anytxn.param.entity.PrBankInstInfoVo;

import java.util.List;

/**
 * 分支行-机构信息表 业务接口
 *
 * @author Liuzb
 * @date 2022/04/21
 */
public interface IBankInstInfoService {


    /**
     * 根据机构表编号查询通区域的所有支行信息
     *
     * @param bankInstInfo
     * @return
     * @throws TxnException
     */
    List<PrBankInstInfo> subBranchInfo(PrBankInstInfo bankInstInfo) throws TxnException;

    /**
     * 查询所有分行信息
     *
     * @return
     * @throws TxnException
     */
    List<PrBankInstInfo> branchInfo() throws TxnException;

    /**
     * 根据租户ID和主键ID查询
     *
     * @param tenantId
     * @param id
     * @return
     * @throws TxnException
     */
    PrBankInstInfo getBankInstInfoById(String tenantId, String id) throws TxnException;

    /**
     * 新增分支行-机构信息
     * @param bankInstInfo
     * @return
     * @throws TxnException
     */
    PrBankInstInfo addBankInstInfo(PrBankInstInfo bankInstInfo) throws TxnException;

    /**
     * 分页查询分支行-机构信息参数信息
     *
     * @param pageNum
     * @param pageSize
     * @param bankInstInfo
     * @return
     * @throws TxnException
     */
    TxnPage<PrBankInstInfo> findAllPageByTenantId(Integer pageNum, Integer pageSize, PrBankInstInfo bankInstInfo) throws TxnException;

    /**
     * 修改分支行-机构信息
     * @param bankInstInfo
     * @return
     * @throws TxnException
     */
    PrBankInstInfo modifyPrBankInstInfo(PrBankInstInfo bankInstInfo) throws TxnException;

    /**
     * 根据ID删除信息
     *
     * @param tenantId
     * @param id
     * @return
     * @throws TxnException
     */
    Boolean removeByTenantIdAndId(String tenantId, String id) throws TxnException;

    /**
     * 根据条件查找分支行信息
     * @param bankInstInfo
     * @return
     */
    List<PrBankInstInfo> queryByPrBankInstInfo(PrBankInstInfo bankInstInfo);

    /**
     * 根据银行代码查询上级分行信息
     *
     * @param bankInstInfo
     * @return
     */
    PrBankInstInfoVo queryLeaderBank(PrBankInstInfo bankInstInfo) throws TxnException;
}
